/*
Problem Description
度熊所居住的 D 国，是一个完全尊重人权的国度。以至于这个国家的所有人命名自己的名字都非常奇怪。一个人的名字由若干个字符组成，同样的，这些字符的全排列的结果中的每一个字符串，也都是这个人的名字。例如，如果一个人名字是 ACM，那么 AMC， CAM， MAC， MCA， 等也都是这个人的名字。在这个国家中，没有两个名字相同的人。

度熊想统计这个国家的人口数量，请帮助度熊设计一个程序，用来统计每一个人在之前被统计过多少次。

Input
这里包括一组测试数据，第一行包含一个正整数N，接下来的N 行代表了 N 个名字。N 不会超过100,000他们的名字不会超过40位.

Output
对于每输入的一个人名，输出一个整数，代表这个人之前被统计了多少次。

Sample Input
5
ACM
MAC
BBA
ACM
BAB
Sample Output
0
1
0
2
1
 */
package com.yuan.algorithms.competition2016;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * @author YouYuan
 * @contact 1265161633@qq.com
 * @date 2016年5月15日 下午6:26:15
 * @descript 
 */
public class 百度之星资格赛_D {
	static Scanner in = new Scanner(System.in);
	public static void main(String[] args) {
		int n = in.nextInt();
		in.nextLine();
		Map<String, Integer> map = new HashMap<String, Integer>();//映射姓名和出现次数
		Map<String, String> strmap = new HashMap<String, String>();//映射姓名和编码后的key
		for (int i = 0; i < n; i++) {
			String str = in.nextLine();
			String key;
			if (strmap.get(str) == null) {
				key = encode(str);
				strmap.put(str, key);
			} else {
				key = strmap.get(str);
			}
//			Arrays.sort(strs);
//			String key = Arrays.toString(strs);
			Integer sum = map.get(key);
			if (sum == null) {
				System.out.println(0);
				map.put(key, 1);
			} else {
				System.out.println(sum);
				map.put(key, sum+1);
			}
		}
	}
	private static String encode(String str) {
		int[] arr = new int[400];
		for (int i = 0; i < str.length(); i++) {
			char t = str.charAt(i);
			arr[(int)t]++;
		}
		StringBuilder encodeStr = new StringBuilder();
		for (int i = 0; i < arr.length; i++) {
			encodeStr.append(arr[i]);
		}
		return encodeStr.toString();
	}
}
